package com.start.boot.web;

import com.start.boot.domain.Rybm;
import com.start.boot.service.UserService;
import com.start.boot.support.utils.AjaxHelper;
import com.start.boot.support.utils.EasyUIHelper;
import com.start.boot.support.utils.GetDw;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用户控制器
 * Created by lenovo on 2017/10/25.
 */
@RestController
@RequestMapping("/user")
public class UesrController extends ArchivesSystemBaseController{


    @Autowired
    private UserService userService;


    /**
     * 获取单位树
     * @param dwbm
     * @return
     */
    @RequestMapping("/GetDwbmCombTree")
    public  String GetDwbmCombTree(@RequestParam String dwbm) {

        if (StringUtils.isEmpty(dwbm)) {
            super.errMsg("获取单位树形下拉框失败",dwbm,new Exception("获取单位树形下拉框失败"));
            return null;
        }

        Map map = new HashMap<>();
        map.put("p_dwbm",dwbm);
        userService.GetDwbmCombTree(map);

        Object p_errmsg = map.get("p_errmsg");
        String str="";
        if (p_errmsg!= null) {
            super.errMsg("获取单位树失败",map.toString(),new Exception("获取单位树失败"));
        }else {
                List<Map> list = (List<Map>) map.get("p_cursor");
                if (list != null) {
                    //遍历集合，找到本单位的父单位
                    String topBM = GetDw.topBM(list, dwbm);
                    str =   EasyUIHelper.buildTreeDataSourceWithoutIconCol(list, "BM", "FBM", "MC", topBM);
                }
        }
        return str;
    }


    /**
     * 获取统一业务新增人员信息列表
     * @param dwbm
     * @param mc
     * @return
     */
    @RequestMapping("/TyywNewUserList")
    public  String TyywNewUserList(@RequestParam String dwbm,@RequestParam String mc) {

        //当前页,以及页大小：
        int page = parsePage(getParameter("page"));
        int rows = parseRows(getParameter("rows"));

        Map map = new HashMap();
        map.put("p_dwbm",dwbm);
        map.put("p_mc",mc);
        map.put("p_pagesize",rows);
        map.put("p_pageindex",page);

        userService.TyywNewUserList(map);
        List<Map> list = (List<Map>) map.get("p_cursor");
        String p_errmsg = (String) map.get("p_errmsg");

        if (p_errmsg != null ) {
           super.errMsg("获取统一业务新增人员信息列表失败",map.toString(),new Exception("获取统一业务新增人员信息列表失败"));
        }
        Integer total = (Integer) map.get("p_count");

        return EasyUIHelper.buildDataGridDataSource(list,total);
    }

    /**
     * 获取人员信息列表
     * @param mc
     * @param gh
     * @param dwbm
     * @return
     */
    @RequestMapping("/GetUserList")
    public String GetUserList(String mc,String gh,String dwbm) {

        //获取页面、页大小：
        int page = parsePage(getParameter("page"));
        int rows = parseRows(getParameter("rows"));

        //获取Ajax传递来的数据：
        Map map = new HashMap();
        map.put("p_dwbm",dwbm);
        map.put("p_gh",gh);
        map.put("p_mc",mc);
        map.put("p_pagesize",rows);
        map.put("p_pageindex",page);

        userService.GetUserList(map);
        List<Map> list = (List<Map>) map.get("p_cursor");
        String p_errmsg = (String) map.get("p_errmsg");
        if (p_errmsg != null) {
            super.errMsg("获取人员信息列表发生错误。",map.toString(),new Exception("获取人员信息列表发生错误。"));
        }
        Integer p_count = (Integer) map.get("p_count");

        return EasyUIHelper.buildDataGridDataSource(list,p_count);

    }


    /**
     * 添加/更新人员信息
     * @param
     * @param rybm
     * @return
     */
    @RequestMapping("/AddOrUpdateRybm")
    public String AddOrUpdateRybm(Rybm rybm) {


        Map<String,String> map = new HashMap<>();
        map.put("action",rybm.getAction());
        map.put("p_mc",rybm.getMc());
        map.put("p_dlbm",rybm.getDlbm());
        map.put("p_gzzh",rybm.getGzzh());
        map.put("p_xb",rybm.getXb());
        map.put("p_sflsry",rybm.getSflsry());
        map.put("p_yddhhm",rybm.getYddhhm());
        map.put("p_dzyj",rybm.getDzyj());
        map.put("p_caid",rybm.getCaid());
        map.put("p_gh",rybm.getGh());
        map.put("p_dwbm",rybm.getDwbm());
        map.put("p_xdwbm",rybm.getXdwbm());

        //与数据库统一
        map.put("p_kl","");
        map.put("p_ydwbm","");
        map.put("p_ydwmc","");
        map.put("p_sftz","");
        map.put("p_sfsc","");

        String errmsg = userService.addOrUpdateRybm(map);
        if (errmsg != null) {
            super.errMsg("更新/添加用户失败",map.toString(),new Exception("更新/添加用户失败"));
        }
        return errmsg ==null?"操作成功":errmsg;
    }


    /**
     * 根据工号获取人员信息详情
     * @param gh
     * @param dwbm
     * @return
     */
    @RequestMapping("/GetUserByGh")
    public String GetUserByGh(String gh,String dwbm) {

        Map map = new HashMap();
        map.put("p_dwbm",dwbm);
        map.put("p_gh",gh);

        userService.GetUserByGh(map);
        Object p_errmsg = map.get("p_errmsg");
        if (p_errmsg != null) {
            super.errMsg("获取人员信息失败",map.toString(),new Exception("获取人员信息失败"));
        }

        List<Rybm> p_cursor = (List<Rybm>) map.get("p_cursor");
        Rybm rybm=null;
        if (p_cursor !=null) {
            rybm = p_cursor.get(0);
            rybm.setGh(StringUtils.isEmpty(rybm.getGh()) ? "" : rybm.getGh());
            rybm.setDwbm(StringUtils.isEmpty(rybm.getDwbm()) ? "" : rybm.getDwbm());
            rybm.setMc(StringUtils.isEmpty(rybm.getMc()) ? "" : rybm.getMc());
            rybm.setDlbm(StringUtils.isEmpty(rybm.getDlbm()) ? "" : rybm.getDlbm());
            rybm.setGzzh(StringUtils.isEmpty(rybm.getGzzh()) ? "" : rybm.getGzzh());
            rybm.setXb(StringUtils.isEmpty(rybm.getXb()) ? "" : rybm.getXb());
            rybm.setSflsry(StringUtils.isEmpty(rybm.getSflsry()) ? "" : rybm.getSflsry());
            rybm.setYddhhm(StringUtils.isEmpty(rybm.getYddhhm()) ? "" : rybm.getYddhhm());
            rybm.setDzyj(StringUtils.isEmpty(rybm.getDzyj()) ? "" : rybm.getDzyj());
            rybm.setCaid(StringUtils.isEmpty(rybm.getCaid()) ? "" : rybm.getCaid());
        }

        StringBuilder sb = new StringBuilder();
        sb.append("gh:"+rybm.getGh()).append(",dwbm:"+rybm.getDwbm()).append
                (",mc:"+rybm.getMc()).append(",dlbm:"+rybm.getDlbm()).append(",gzzh:"+rybm.getGzzh()).append
                (",xb:"+rybm.getXb()).append(",sflsry:"+rybm.getSflsry()).append(",yddhhm:"+rybm.getYddhhm()).
                append(",dzyj:"+rybm.getDzyj()).append(",caid:" + rybm.getCaid());


        return p_errmsg==null?sb.toString():"根据工号获取人员信息详情出错";
    }


    /**
     * 删除人员信息
     * @param dwbm
     * @param ghj
     * @return
     */
    @RequestMapping("/DeleteUser")
    public String DeleteUser(String dwbm,String ghj) {

        Map map = new HashMap();
        map.put("p_dwbm",dwbm);
        map.put("p_ghj",ghj);

        userService.DeleteUser(map);
        Object p_errmsg = map.get("p_errmsg");
        if (p_errmsg != null) {
            super.errMsg("删除人员信息失败",map.toString(),new Exception("删除人员信息失败"));
        }

        return p_errmsg==null?"删除人员信息成功":p_errmsg.toString();
    }

    /**
     * 人员重置密码
     * @param dwbm
     * @param ghj
     * @return
     */
    @RequestMapping("/ResetUserPwd")
    public String ResetUserPwd(String dwbm,String ghj) {

        Map map = new HashMap();
        map.put("p_dwbm",dwbm);
        map.put("p_ghj",ghj);

        userService.ResetUserPwd(map);
        Object p_errmsg = map.get("p_errmsg");
        if (p_errmsg != null) {
            super.errMsg("人员重置密码失败",map.toString(),new Exception("人员重置密码失败"));
        }

        return p_errmsg==null ?"密码重置成功":"人员重置密码失败";
    }

    /**
     * 人员同步
     * @param dwbm
     * @param gh
     * @return
     */
    @RequestMapping("/UserSync")
    public String UserSync(String dwbm,String gh) {
        Map map = new HashMap();
        map.put("p_dwbm",dwbm);
        map.put("p_gh",gh);

        userService.UserSync(map);
        String p_errmsg = (String) map.get("p_errmsg");
        boolean isSuccess =true;
        if (p_errmsg != null) {
            isSuccess = false;
            super.errMsg("人员同步失败",map.toString(),new Exception("人员同步失败"));
        }

        return AjaxHelper.buildResponseDataSource(p_errmsg,isSuccess);
    }
}
